package cn.biplam.back.sql.type;

import java.io.Serializable;

import cn.biplam.common.wrapper.ErrorMessage;

/**
 * Long数据元
 * <li> 对应数据库的大数据类型 如：BloB、Long、text等
 * @author XiaoRuxing 2009-6-25下午03:47:08
 * @version 1.0
 */
public class Blob implements Type,Serializable{
	
	private static final long serialVersionUID = 3648837518946091692L;

	/** 描述关键字 */
	public static final String sTypeName="BLOB";

	private boolean bIsNull=true;
	private String value=null;
	
	public Blob(){}
	
	/**
	 * 构造函数,设置数据元的值
	 * @param sValue
	 * @throws ErrorMessage
	 */
	public Blob(String sValue) throws ErrorMessage{
		setValue(sValue);
	}
	
	/**
	 * 返回数据元完整描述
	 * @return
	 */
	public String getType() {
		return sTypeName;
	}

	/**
	 * 返回数据元关键字
	 * @return
	 */
	public String getTypeName() {
		return sTypeName;
	}

	/**
	 * 返回数据元值，不允许为空的情况下返回
	 * @return
	 * @throws ErrorMessage
	 */
	public String getValue() throws ErrorMessage {
		if(value==null){
			ErrorMessage mEmg=new ErrorMessage("Long type is empty !");
			throw mEmg;
		}
		return this.value;
	}

	public boolean isNull() {
		return this.bIsNull;
	}

	/**
	 * 返回数据元长度
	 * @return
	 */
	public int getPercesion() {
		if(value==null){
			return 0;
		}else{
			return value.length();
		}
	}

	/**
	 * 不允许设置数据元长度
	 * @param length
	 * @throws ErrorMessage
	 */
	public void setLength(int length) throws ErrorMessage {
		ErrorMessage mEmg=new ErrorMessage("Long can not set length !");
		throw mEmg;
	}

	/**
	 * 设置数据元的值
	 * @param value 值
	 * @throws ErrorMessage
	 */
	public void setValue(String value) throws ErrorMessage {
		this.value=value;
	}

	/**
	 * 返回数据元值的字符串表示，如果为空返回"null"
	 * @return
	 */
	public String toString(){
		if(this.value==null){
			return "null";
		}else{
			return this.value;
		}
	}

	/**
	 * 返回数据元精度，数据元无精度，默认-1
	 * @return
	 */
	public int getScale() {
		return -1;
	}
}
